package leetcode;

/*
剑指 Offer 20. 表示数值的字符串
请实现一个函数用来判断字符串是否表示数值（包括整数和小数）。例如，字符串"+100"、"5e2"、"-123"、"3.1416"、"-1E-16"、"0123"都表示数值，但"12e"、"1a3.14"、"1.2.3"、"+-5"及"12e+5.4"都不是。
*/

import java.util.ArrayList;
import java.util.List;

public class problems_off_20 {
    public static void main(String[] args) {
        System.out.println(new Solution().isNumber("2e0"));
    }

    /**
     * 思路太麻烦，单纯的学习了
     */
    static class Solution {
        /**
         * 本题的思路是【自动机】，简单的说就是包含一系列规则的函数，可回答「对于给定的输入字符串 S，判断其是否满足条件 P」
         * +100"、"5e2"、"-123"、"3.1416"、"-1E-16"、"0123"
         * [+-][数字]
         */
        public boolean isNumber(String s) {
            return s.toUpperCase().trim().matches("^[+|-]?((\\d+\\.?)|(\\d*\\.?\\d+))([E][+|-]?\\d+)?$");
        }
    }
}